07 Para saber mais: strictNullChecks, exemplo 2

Próxima Atividade
  • Mudar o player
  • Sugerir melhoria

Temos a seguinte função:

function minhaFuncao(flag: boolean) {

    let valor = null;
    if(flag) return null;
    return true;
}

let x = minhaFuncao(false);

O código compila, pois minhaFuncao pode retornar null ou um boolean dependendo do valor do parâmetro flag passado. O TypeScript também consegue inferir os dois tipos retornados pela função.

Mas se quisermos tipar o retorno de minhaFuncao como boolean? Teremos um erro de compilação:

function minhaFuncao(flag: boolean): boolean {

    let valor = null;

    // erro aqui! 
    // Type 'null' is not assignable to type 'boolean'.

    if(flag) return null;
    return true;
}

let x = minhaFuncao(false);

Com strictNullChecks ativado não podemos retornar null para uma função que explicitamente indicamos que retorna boolean. Se a opção do compilador não estivesse ativa, funcionaria pois null pode ser atribuído a qualquer tipo do TypeScript. Mas será que conseguimos fazer esse código compilar sem termos que desativar esta strictNullChecks no compilador?

Podemos indicar que a função pode devolver mais de um tipo, no caso ela devolverá boolean ou null:

// deixarmos explícitos que a função pode retornar boolean ou null
function minhaFuncao(flag: boolean): boolean | null{

    let valor = null;
    if(flag) return null;
    return true;
}

let x = minhaFuncao(false);

Agora, como explicitamos que seu retorno pode ser também null, nosso código passará pelo strictNullChecks. Curiosamente, linguagens como a Golang permitem uma função ou método ter mais de um tipo de retorno.

Tirar dúvida Próxima Atividade
ícone TypeScript parte 2: Mais técnicas e boas práticas

TypeScript parte 2: Mais técnicas e boas práticas

100%
Aula02 de 05

Lapidando nosso código

Atividades 7 de 13

  • 01 Propriedades readonly 04min
  • 02 Sobre design de classe
  • 03 Parâmetros opcionais 07min
  • 04 Sobre parâmetros opcionais
  • 05 Ativando strictNullChecks 09min
  • 06 Para saber mais: strictNullChecks, exemplo 1
  • 07 Para saber mais: strictNullChecks, exemplo 2
  • 08 Para saber mais: o tipo never
  • 09 Trabalhando com Enuns 08min
  • 10 Sobre o valor da enum
  • 11 Para saber mais: um detalhe importante sobre enum
  • 12 Revisão 03min
  • 13 Consolidando seus conhecimentos

Aulas

Outros Links

Fórum Trocar Curso
Gravatar de Marcos Katsumi Kay

Marcos Katsumi Kay 34.0k xp

Logo da Alura